package models

import (
	"jnjword/utils"

	"gorm.io/gorm"
)

type UserBasic struct {
	gorm.Model //gorm.Model 包含了ID，CreatedAt，UpdatedAt，DeletedAt字段
	Name       string
	Password   string
}

// 定义UserBasic结构体的TableName方法，返回表名为"user_basic"
func (table *UserBasic) TableName() string {
	return "user_basic"
}

// 根据用户名查找用户
func FindUserByName(name string) UserBasic {
	user := &UserBasic{}
	utils.DB.Where("name = ?", name).Find(&user)
	return *user
}

// 根据用户账号密码查找用户
func FindUserByNameAndPassword(name, password string) UserBasic {
	user := &UserBasic{}
	utils.DB.Where("name = ? AND password = ?", name, password).Find(&user)
	return *user
}

// 获取用户列表
func GetUserList() []*UserBasic {
	// 创建一个长度为10的UserBasic指针切片
	data := make([]*UserBasic, 10)
	// 从数据库中查找数据，并将结果存储到data中
	utils.DB.Find(&data)
	return data
}

// 创建用户函数，接收一个UserBasic类型的参数user，返回一个*gorm.DB类型的指针
func CreateUser(user UserBasic) *gorm.DB {
	// fmt.Println("***********")
	// fmt.Println("create user")
	// fmt.Println("***********")
	// 使用utils包中的DB对象，调用Create方法，传入user参数，创建用户
	// 先确认user用户是否存在
	if FindUserByName(user.Name).Name != "" {
		return nil
	}
	return utils.DB.Create(&user)
}

// DeleteUser函数用于删除用户
func DeleteUser(name string) *gorm.DB {
	var user UserBasic
	user.Name = name
	// 使用utils包中的DB对象，调用Create方法，传入user参数，删除用户 逻辑删除并不是真正的删除
	return utils.DB.Delete(&user)
}

// 更新用户信息// 更新用户信息（根据ID更新，更安全）
func UpdateUser(userID uint, newName, newPassword string) *gorm.DB {
	// 明确指定更新条件：ID = userID
	// 只更新Name和Password字段，避免意外更新其他字段（如创建时间）
	return utils.DB.Model(&UserBasic{}).
		Where("id = ?", userID). // 关键：通过ID锁定要更新的用户
		Updates(map[string]interface{}{
			"name":     newName,
			"password": newPassword,
		})
}
